package ningbo.list;

import sun.applet.Main;

import java.util.*;

/**
 * @Author 宁铂
 * @Date 2021/7/28 11:02
 * @Version 1.0
 */
public class TestMap {
    /** 本类用于测试map接口 */
    public static void main(String[] args) {
        /** 一定要指定k和v的数据类型
         *  k和v 具体的类型,取决于具体的业务需求
         * */
        Map<Integer,String> map = new HashMap<>();

        map.put(0, "100");
        map.put(1, "200");
        map.put(2, "300");
        map.put(3, "400");
        map.put(4, "400");
        /** map中存放的都是无序的数据
         *  map,中value可以重复,但key不能重复,如果重复会被后者覆盖
         * */
        System.out.println(map);

        /** 方法测试 */
        map.hashCode(); //哈希码
        map.equals("100"); //对比
        map.size(); //个数
        map.isEmpty(); //是否包含

        map.containsKey(0); //判断是否包含指定的key
        map.containsValue("100"); //判断是否包含指定的value

        map.get(0); //根据key获取指定的value
        map.remove(4); //根据指定的key,删除整条数据

        /** 将map中的value取出,存入collection集合中
         *  集合的类型取决于,map中value的类型
         * */
        Collection<String> values = map.values();
        System.out.println(values);

        /** map的迭代方法
         *  方法一:把所有key存入set集合中,再通过key找到value
         * */
        Set<Integer> integers = map.keySet();
        Iterator<Integer> iterator = integers.iterator();
        while (iterator.hasNext()){
            Integer next = iterator.next();
            String s = map.get(next);
            System.out.println("{"+next+","+s+"}");
        }

        /** 方法二: 把map集合转换成set集合,把map中的一堆键值key&value作为一个Entry方入set
         * */

        Set<Map.Entry<Integer, String>> entries = map.entrySet();

        Iterator<Map.Entry<Integer, String>> iterator1 = entries.iterator();
        while (iterator1.hasNext()){
            Map.Entry<Integer, String> next = iterator1.next();
            Integer key = next.getKey();
            String value = next.getValue();
            System.out.println("{"+key+","+value+"}");
        }

        map.clear();
    }
}
